
/**
 * \file Link.h
 * \brief Module gérant Link
 * \author Brogard Pierre, Carrillon Sovanna
 * \version 1.0
 * \date juin 2011
 */

#ifndef LINK_H
#define LINK_H

#include "Direction.h"
#include "Position.h"

#include <stdio.h>
#include <stdlib.h>

/**
  * \enum EtatLink
  * \brief link peut prendre 2 états, "normal" et "devil", pas encore utilisé...
  */
enum etatLink {normal, devil} ;
typedef enum etatLink EtatL;

/**
  * \struct Link
  * \brief se compose d'une position, d'une direction, d'un nombre de coeurs, d'un nombre de vie et d'un état
  */
typedef struct
    {
    Position position;
    Direction direction;
    int coeurs;
    int vies;
    EtatL etat;
    }
Link;

/* initialisation */
    void linInit(Link* p_link);



/* Mouvements: */

    void linTeleporte(Link* p_link, int x, int y); /* simple téléportation, ne change pas la direction de Link */


    void linDeplace(Link* p_link, Direction dir);

    void linTourne(Link* p_link, Direction dir);


const Direction linGetDirection(const Link* p_link);


int linGetPosX(const Link* p_link);
int linGetPosY(const Link* p_link);

const Position* linGetConstPosition(const Link* p_link);

void linAttaqueEpee(Link* p_link, Position tab_de_positions_touchees[3]);

int linGetNbCoeurs(const Link* p_link);

void linChangeNbCoeurs(Link* p_link, int modificateur);


int linGetNbVies(const Link* p_link);

void linChangeNbVies(Link* p_link, int modificateur);


const EtatL linGetEtat(const Link* p_link);

void linSetEtat(Link* p_link, EtatL nouvel_etat);

/* manque test de régression */

#endif /* LINK_H */
